#ifndef SAMPLE_HPP
#define SAMPLE_HPP

#include <cstdint>
#include <tuple>

namespace sample {
namespace autosar {

class A
{
public:
    void SetID(std::int32_t const _id) noexcept;
    std::int32_t GetID() const noexcept;

private:
    std::int32_t mId {0U};
};

template <typename T>
class B
{
public:
  using Type = std::int32_t;

  Type f(T const&) noexcept;
  Type g(T const&) noexcept;
};

std::uint32_t func_A0_1_2_helper() noexcept;
void func_A0_1_2() noexcept;

/* @brief Sample code for the rule A2-7-3
 * @param input1 input1 parameter description
 * @param input2 input2 parameter description
 * @throw std::runtime_error conditions to runtime_error occur
 * @return return value description
 */
std::int32_t func_A2_7_3(std::int32_t const input1, std::int64_t const input2) noexcept(false);
const A& func_A7_5_1_a(A const & _ref) noexcept;
const A& func_A7_5_1_b(A & _ref) noexcept;
const A* func_A7_5_1_c(A const & _ref) noexcept;
const A* func_A7_5_1_d(A & _ref) noexcept;
void func_A7_5_1() noexcept;
void func_A8_4_1_a(char const * const _format, ...) noexcept;
template <typename First, typename... Rest>
void func_A8_4_1_b(First const &, Rest const &...) noexcept;
std::int32_t func_A8_4_4_a(std::int32_t const, std::int32_t const, std::int32_t &);
std::tuple<std::int32_t, std::int32_t> func_A8_4_4_b(std::int32_t const, std::int32_t const);

}
}
#endif // SAMPLE_HPP

